package com.blog.cmrpersonalblog.dto.comment.request;

import lombok.Data;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.util.List;

/**
 * 评论创建请求DTO
 */
@Data
public class CommentCreateRequest {

    /**
     * 文章ID
     */
    @NotNull(message = "文章ID不能为空")
    private Long articleId;

    /**
     * 父评论ID（顶级评论时为null或0）
     */
    private Long parentId;

    /**
     * 回复的用户ID（回复特定用户时）
     */
    private Long replyToUserId;

    /**
     * 根评论ID（用于构建评论树）
     */
    private Long rootId;

    /**
     * 评论内容
     */
    @NotBlank(message = "评论内容不能为空")
    @Size(min = 1, max = 1000, message = "评论内容长度必须在1-1000个字符之间")
    private String content;

    /**
     * 临时图片ID列表（可选）
     */
    private List<Long> tempImageIds;

    /**
     * 上传令牌列表（可选，与tempImageIds二选一）
     */
    private List<String> uploadTokens;

    /**
     * 是否为顶级评论
     */
    public boolean isTopLevelComment() {
        return parentId == null || parentId == 0;
    }

    /**
     * 是否为回复评论
     */
    public boolean isReplyComment() {
        return parentId != null && parentId > 0;
    }

    /**
     * 获取有效的父评论ID
     */
    public Long getEffectiveParentId() {
        return (parentId == null || parentId == 0) ? 0L : parentId;
    }

    /**
     * 获取有效的根评论ID
     */
    public Long getEffectiveRootId() {
        if (isTopLevelComment()) {
            return null; // 顶级评论的rootId会在创建后设置为自己的ID
        }
        return rootId;
    }
}
